package com.gitee.huanminabc.jcommon.base;

import com.gitee.huanminabc.jcommon.enums.DatePatternEnum;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 简要描述
 *
 * @Author: huanmin
 * @Date: 2025/4/9 01:10
 * @Version: 1.0
 * @Description: 文件作用详细描述....
 */
public class DateUtil {
    //当前日期   字符串形式  ?-?-?  : :
    public static String now() {
        Date dNow = new Date();
        return format(dNow);
    }
    public static String nowNoSymbol() {
        Date dNow = new Date();
        SimpleDateFormat ft = new SimpleDateFormat(DatePatternEnum.NUM_DATETIME_PATTERN.getValue());
        return ft.format(dNow);
    }
    public static String now(DatePatternEnum datePatternEnum) {
        Date dNow = new Date();
        return format(dNow, datePatternEnum);
    }
    //将时间转换为DATETIME_PATTERN
    public static String format(Date date) {
        SimpleDateFormat ft = new SimpleDateFormat(DatePatternEnum.DATETIME_PATTERN.getValue());
        return ft.format(date);
    }
    public static String format(Date date, DatePatternEnum datePatternEnum) {
        SimpleDateFormat ft = new SimpleDateFormat(datePatternEnum.getValue());
        return ft.format(date);
    }

    //传入字符串根据指定格式转换为Date对象然后进行比较 0表示相等，1表示date1大于date2，-1表示date1小于date2
    public static int compare(String date1, String date2, DatePatternEnum datePatternEnum) {
        //获取datePatternEnum的长度然后截取
        if (date1 == null || date2 == null) {
            throw new RuntimeException("日期字符串不能为空");
        }
        if (datePatternEnum == null) {
            throw new RuntimeException("日期格式不能为空");
        }
        int length = datePatternEnum.getValue().length();
        //判断长度不能小于
        if (date1.length() < length || date2.length() < length) {
            throw new RuntimeException("日期字符串长度不符合格式要求");
        }
        date1= date1.substring( 0, length);
        date2= date2.substring( 0, length);
        SimpleDateFormat ft = new SimpleDateFormat(datePatternEnum.getValue());
        try {
            Date d1 = ft.parse(date1);
            Date d2 = ft.parse(date2);
            return d1.compareTo(d2);
        } catch (Exception e) {
            throw new RuntimeException("日期格式转换错误", e);
        }
    }
    //两个时间进行比较但是会先把时间转换为同一个格式后才进行比较
    public static int compare(Date date1, Date date2, DatePatternEnum datePatternEnum) {
        //先将date1和date2转换为同格式的时间进行比较
        String date1Str = format(date1, datePatternEnum);
        String date2Str = format(date2, datePatternEnum);
        return compare(date1Str, date2Str, datePatternEnum);
    }

}
